home *** CD-ROM | disk | FTP | other *** search
- /*
- * Bawk constants and variable declarations.
- */
- #ifdef BDS_C
- #define EXTERN /* */
- #else
-
- #ifdef MAIN
- #define EXTERN /* */
- #else
- #define EXTERN extern
- #endif
-
- #endif
-
-
- #define DEBUG 1 /* remove this line to compile without debug statements */
- #ifdef DEBUG
- EXTERN char Debug; /* debug print flag */
- #endif
-
- /*
- * Table and buffer sizes
- */
- #define MAXLINELEN 128 /* longest input line */
- #define MAXWORDS (MAXLINELEN/2) /* max # of words in a line */
- #define MAXWORKBUFLEN 4096 /* longest action or regular expression */
- #define MAXVARTABSZ 50 /* max # of symbols */
- #define MAXVARLEN 10 /* symbol name length */
- #define MAXSTACKSZ 40 /* max value stack length (for expressions) */
-
-
- /**********************************************************
- * Current Input File variables *
- **********************************************************/
- /*
- * Current Input File pointer:
- */
- #ifdef BDS_C
- EXTERN char *Fileptr, Curfbuf[ BUFSIZ ];
- #else
- EXTERN FILE *Fileptr;
- #endif
- EXTERN char *Filename; /* current input file name */
- EXTERN int Linecount; /* current input line number */
- EXTERN int Recordcount; /* record count */
- /*
- * Working buffers.
- */
- EXTERN char Linebuf[ MAXLINELEN ]; /* current input line buffer */
- EXTERN char *Fields[ MAXWORDS ]; /* pointers to the words in Linebuf */
- EXTERN int Fieldcount; /* and the # of words */
- EXTERN char Workbuf[ MAXWORKBUFLEN ]; /* work area for C action and */
- /* regular expression parsers */
-
- /**********************************************************
- * Regular Expression Parser variables *
- **********************************************************/
- /*
- * Tokens:
- */
- #define CHAR 1
- #define BOL 2
- #define EOL 3
- #define ANY 4
- #define CLASS 5
- #define NCLASS 6
- #define STAR 7
- #define PLUS 8
- #define MINUS 9
- #define ALPHA 10
- #define DIGIT 11
- #define NALPHA 12
- #define PUNCT 13
- #define RANGE 14
- #define ENDPAT 15
-
-
- /**********************************************************
- * C Actions Interpreter variables *
- **********************************************************/
- /*
- * Tokens:
- */
- #define T_STRING 'S' /* primaries: */
- #define T_DOLLAR '$'
- #define T_REGEXP 'r'
- #define T_CONSTANT 'C'
- #define T_VARIABLE 'V'
- #define T_FUNCTION 'F'
- #define T_SEMICOLON ';' /* punctuation */
- #define T_EOF 'Z'
- #define T_LBRACE '{'
- #define T_RBRACE '}'
- #define T_LPAREN '('
- #define T_RPAREN ')'
- #define T_LBRACKET '['
- #define T_RBRACKET ']'
- #define T_COMMA ','
- #define T_ASSIGN '=' /* operators: */
- #define T_MUL '*'
- #define T_DIV '/'
- #define T_MOD '%'
- #define T_ADD '+'
- #define T_SUB '-'
- #define T_SHL 'L'
- #define T_SHR 'R'
- #define T_LT '<'
- #define T_LE 'l'
- #define T_GT '>'
- #define T_GE 'g'
- #define T_EQ 'q'
- #define T_NE 'n'
- #define T_NOT '~'
- #define T_AND '&'
- #define T_XOR '^'
- #define T_IOR '|'
- #define T_LNOT '!'
- #define T_LAND 'a'
- #define T_LIOR 'o'
- #define T_INCR 'p'
- #define T_DECR 'm'
- #define T_IF 'i' /* keywords: */
- #define T_ELSE 'e'
- #define T_WHILE 'w'
- #define T_BREAK 'b'
- #define T_CHAR 'c'
- #define T_INT 't'
- #define T_BEGIN 'B'
- #define T_END 'E'
- #define T_NF 'f'
- #define T_NR '#'
- #define T_FS ' '
- #define T_RS '\n'
- #define T_FILENAME 'z'
-
- #define PATTERN 'P' /* indicates C statement is within a pattern */
- #define ACTION 'A' /* indicates C statement is within an action */
-
- /*
- * Symbol Table values
- */
- #define ACTUAL 0
- #define LVALUE 1
- #define BYTE 1
- #define WORD 2
- /*
- * Symbol table
- */
- struct variable {
- char vname[ MAXVARLEN ];
- char vclass;
- char vsize;
- int vlen;
- char *vptr;
- };
- #define VARIABLE struct variable
- EXTERN VARIABLE Vartab[ MAXVARTABSZ ], *Nextvar;
- /*
- * Value stack
- */
- union datum {
- int ival;
- char *dptr;
- char **ptrptr;
- };
- #define DATUM union datum
- struct item {
- char class;
- char lvalue;
- char size;
- DATUM value;
- };
- #define ITEM struct item
- EXTERN ITEM Stackbtm[ MAXSTACKSZ ], *Stackptr, *Stacktop;
- /*
- * Miscellaneous
- */
- EXTERN char *Actptr; /* pointer into Workbuf during compilation */
- EXTERN char Token; /* current input token */
- EXTERN DATUM Value; /* and its value */
- EXTERN char Saw_break; /* set when break stmt seen */
- EXTERN char Where; /* indicates whether C stmt is a PATTERN or ACTION */
- EXTERN char Fieldsep[3]; /* field seperator */
- EXTERN char Recordsep[3]; /* record seperator */
- EXTERN char *Beginact; /* BEGINning of input actions */
- EXTERN char *Endact; /* END of input actions */
-
- /**********************************************************
- * Rules structure *
- **********************************************************/
- struct rule {
- struct {
- char *start; /* C statements that match pattern start */
- char *stop; /* C statements that match pattern end */
- char startseen; /* set if both a start and stop pattern */
- /* given and if an input line matched the */
- /* start pattern */
- } pattern;
- char *action; /* contains quasi-C statements of actions */
- struct rule *nextrule; /* pointer to next rule */
- };
- #define RULE struct rule
- EXTERN RULE *Rules, /* rule structures linked list head */
- *Rulep; /* working pointer */
-
-
- /**********************************************************
- * Miscellaneous *
- **********************************************************/
- /*
- * Error exit values (returned to command shell)
- */
- #define USAGE_ERROR 1 /* error in invokation */
- #define FILE_ERROR 2 /* file not found errors */
- #define RE_ERROR 3 /* bad regular expression */
- #define ACT_ERROR 4 /* bad C action stmt */
- #define MEM_ERROR 5 /* out of memory errors */
- /*
- * Functions that return something special:
- */
- char *str_compile(), *getmem(), *cclass(), *pmatch(), *fetchptr();
- VARIABLE *findvar(), *addvar(), *decl();